package com.quanyan.stadium.utils.demo.view;

/**
 * Created by xiaoxiao on 17/2/6.
 *
 * 懒汉模式
 *
 * 优点:  按需创建
 *
 * 缺点:  能合理解决多线程环境下的漏洞,但是99.9%的情况下不需要使用synchronized来处理,因此懒汉模式稍微有点浪费时间
 */
public class Singleton2 {

    //懒汉模式, 懒汉式是典型的时间换空间,
    // 就是每次获取实例都会进行判断，看是否需要创建实例，浪费判断的时间。当然，如果一直没有人使用的话，那就不会创建实例，则节约内存空间。

    private static Singleton2 singleton = null;

    private Singleton2(){

    }

    //提供给外部使用的构造器,绑定在类本身,而与对象无关,每次都会校验实例是否存在,不存在则创建
    //懒汉式单例类实现里对静态工厂方法使用了同步化，以处理多线程环境。如果这里不添加synchronized关键字,在多线程的环境下会创建多个实例,而static关键字
    //明确了,只能实例化一次,导致无法工作
    //程序的启动与类的加载无关，只有该类被调用时，才会触发类的加载动作。
    public static synchronized Singleton2 getInstance(){
        if (null == singleton) {
            singleton = new Singleton2();
        }
        return singleton;
    }

}
